* gtk/gtkprintoperation-unix.c
(_gtk_print_operation_platform_backend_launch_preview):
Don't leak a file descriptor, and don't make the error
- dialog modal. (#421985, Morten Welinder)
+ dialog modal. (#421985, Morten Welinder, Christian Persch)
2007-04-29 Xan Lopez <xan@gnome.org>
#include <stdlib.h>
#include <fcntl.h>
+#include <glib/gstdio.h>
#include "gtkprintoperation-private.h"
#include "gtkmarshal.h"
#include "gtkmessagedialog.h"
gboolean *settings_filename_replaced)
{
const gchar *inptr, *start;
- gchar *result;
GString *final;
g_return_val_if_fail (cmd != NULL, NULL);
g_return_val_if_fail (pdf_filename != NULL, NULL);
g_return_val_if_fail (settings_filename != NULL, NULL);
- result = NULL;
final = g_string_new (NULL);
*pdf_filename_replaced = FALSE;
}
g_string_append (final, start);
- result = final->str;
-
- g_string_free (final, FALSE);
-
- return result;
+ return g_string_free (final, FALSE);
}
void
gchar *preview_cmd;
GtkSettings *settings;
GtkPrintSettings *print_settings;
- gchar *settings_filename;
+ gchar *settings_filename = NULL;
gchar *quoted_filename;
gchar *quoted_settings_filename;
- gboolean filename_used;
- gboolean settings_used;
+ gboolean filename_used = FALSE;
+ gboolean settings_used = FALSE;
GdkScreen *screen;
GError *error = NULL;
gint fd;
+ gboolean retval;
cairo_surface_destroy (surface);
else
screen = gdk_screen_get_default ();
- settings_filename = g_build_filename (g_get_tmp_dir (), "settingsXXXXXX.ini", NULL);
- fd = g_mkstemp (settings_filename);
+ fd = g_file_open_tmp ("settingsXXXXXX.ini", &settings_filename, &error);
+ if (fd < 0)
+ goto out;
print_settings = gtk_print_operation_get_print_settings (op);
- if (!gtk_print_settings_to_file (print_settings, settings_filename, &error))
+ retval = gtk_print_settings_to_file (print_settings, settings_filename, &error);
+ close (fd);
+
+ if (!retval)
goto out;
settings = gtk_settings_get_for_screen (screen);
g_strfreev (argv);
out:
- close (fd);
-
if (error != NULL)
{
GtkWidget *edialog;